using System;
using System.Linq;

class Program
{
    static void Main()
    {
        //iestatu savu vardu un uzvardu
        string vards = "Kristers";
        string uzvards = "Saltais";

        //izvada manu vārdu un uzvārdu kā arī to garumu
        Console.WriteLine($"Mans vārds ir {vards} un tajā ir {vards.Length} simboli");
        Console.WriteLine($"Mans uzvārds ir {uzvards} un tajā ir {uzvards.Length} simboli");

        //izskaidro minimālo un maksimālo garumu
        int minValue = vards.Length;
        int maxValue = vards.Length + uzvards.Length;
       
        //izveido random izdomātus skaitļus
        Random rand = new Random();

        //pārvērš vārdu par lielo burtu masīvu
        char[] vardaBurti = vards.ToUpper().ToCharArray();
        //pārvērš uzvārdu par mazo burtu masīvu
        char[] uzvardaBurti = uzvards.ToLower().ToCharArray();

        //izreiķina tabulas kolonnu skaitu
        int columns = vardaBurti.Length + 5;
        //izveido tabulas galvenes masīvu
        string[] headers = new string[columns];
        //definē tabulas galvenes
        headers[0] = "x";
        for (int i = 0; i < vardaBurti.Length; i++)
            headers[i + 1] = vardaBurti[i].ToString();
        headers[columns - 4] = "max";
        headers[columns - 3] = "min";
        headers[columns - 2] = "vid";
        headers[columns - 1] = "sum";

        //izreiķina tabulas rindu skaitu
        int rows = uzvardaBurti.Length;
        //izveido masīvu lai glabātu tabulas datus
        int[,] data = new int[rows, vardaBurti.Length + 4];

        //ieraksta tabula datus ar random cipariem
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < vardaBurti.Length; j++)
            {
                data[i, j] = rand.Next(minValue, maxValue + 1);
            }
        }

        //izreiķina katras rindas maksimālo minimālo vidējo un summu
        for (int i = 0; i < rows; i++)
        {
            //izveido masīvu lai glabātu rindas vertības
            int[] rowValues = new int[vardaBurti.Length];
            for (int j = 0; j < vardaBurti.Length; j++)
            {
                rowValues[j] = data[i, j];
            }

            //izreiķina un saglabā maksimālo minimālo vidējo un summu
            data[i, vardaBurti.Length] = rowValues.Max();
            data[i, vardaBurti.Length + 1] = rowValues.Min();
            data[i, vardaBurti.Length + 2] = (int)Math.Round(rowValues.Average());
            data[i, vardaBurti.Length + 3] = rowValues.Sum();
        }

        //izveido funkciju lai izvadītu tabulu
        PrintTable(headers, uzvardaBurti, data, vardaBurti.Length);
    }

    //funkcija lai izvadītu tabulu
    static void PrintTable(string[] headers, char[] rowHeaders, int[,] data, int vardaGarums)
    {
        //izreiķina kolonnu un rindu skaitu
        int columns = headers.Length;
        int rows = rowHeaders.Length;
        //definē kolonnas platumu
        int columnWidth = 5;

        //uztaisa tabulas malas/robežas
        string border = "+" + string.Join("+", Enumerable.Repeat(new string('-', columnWidth), columns)) + "+";

        //izvada tabulas galveni
        Console.WriteLine(border);
        Console.Write("|");
        foreach (var header in headers)
        {
            Console.Write(header.PadRight(columnWidth) + "|");
        }
        Console.WriteLine();
        Console.WriteLine(border);

        //izvada tabulas datus
        for (int i = 0; i < rows; i++)
        {
            Console.Write("| " + rowHeaders[i] + "  |");
            for (int j = 0; j < columns - 1; j++)
            {
                Console.Write(data[i, j].ToString().PadRight(columnWidth) + "|");
            }
            Console.WriteLine();
        }
        Console.WriteLine(border);
    }
}